In stream-oriented communications, such as streaming audio, video, and audio/video communications, it is often necessary to deliver the same data from one source to many different destinations. An example of such an application occurs when multiple students attempt to simultaneously connect to a server to view streaming video of a previously recorded lecture. Additional applications in which the same streaming source data may be delivered to multiple destinations include providing streaming audio, such as music, to multiple destinations or streaming video, such as news clips, to multiple destinations. In these scenarios, or any other scenario in which the same data is delivered to multiple clients, it is desirable that the destination computers be able to detect errors in received data so that the destinations can request retransmission of erroneous data.
One conventional method for detecting errors in received data packets is a checksum. A checksum is a calculated value used to test for the presence of errors in data when data is transmitted over a network or written to a memory device. Checksums are typically calculated by sequentially combining data bits using arithmetic and logic operations. In order to verify data in a communications scenario, a sender calculates a checksum for data to be transmitted and transmits the data and the checksum to a receiver. The receiver receives the data, computes a checksum for the received data, and compares the calculated checksum to the received checksum to detect the presence of errors in the data. If the calculated checksum does not match the received checksum, then the receiver determines that errors are present in the data and may take appropriate action, such as requesting retransmission of the data.
In streaming data applications, checksums are conventionally calculated for each block of data sent to each device, such as a computer. For example, in client-server streaming media applications, client computers may receive stream data from a server using the transmission control protocol (TCP) or user datagram protocol (UDP). Each TCP segment or UDP datagram includes a 16-bit integer checksum used to verify the integrity of the data in the TCP segment or UDP datagram, as well as the TCP or UDP header. To compute the checksum, the TCP or UDP software on the server computes the one's complement sum of each 16-bit block in the TCP or UDP header, the pseudo-header, and the data. The result is a 16-bit one's complement checksum that covers the TCP or UDP header, the data, and the pseudo-header, which includes data from the IP header. This calculation is repeated for each TCP segment or UDP datagram transmitted to each client. Because TCP segments and UDP datagrams may carry thousands of bytes of data, checksum computations may consume a significant percentage of available processor cycles of a streaming media sender.
In streaming media applications where the number of destinations receiving the same data is high, it is desirable to reduce the processing load on the sender for each recipient. Calculating a checksum each time that a TCP segment or UDP datagram is to be sent to each destination unnecessarily consumes a large amount of processing resources at the sending entity. As a result, the number of destinations capable of being served by each sending entity is reduced. The amount of hardware required to serve multiple streaming data destinations is increased. Accordingly, there exists a need for methods and systems for efficiently delivering streaming data to a plurality of recipients that reduce processing load per recipient at the sender.